/**
 * Project Name:sz_frame
 * File Name:RoleService.java
 * Package Name:com.sz.app.service.impl
 * Date:2015年8月13日下午1:30:30
 * Copyright (c) 2015, chenzhou1025@126.com All Rights Reserved.
 *
 */

package com.energy.analysis.sys.service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import com.energy.analysis.comm.base.BaseMapper;
import com.energy.analysis.comm.base.BaseService;
import com.energy.analysis.comm.page.Page;
import com.energy.analysis.sys.entity.Role;
import com.energy.analysis.sys.mapper.RoleMapper;


/**
 * ClassName:RoleService <br/>
 * Function: TODO ADD FUNCTION. <br/>
 * Reason: TODO ADD REASON. <br/>
 * Date: 2015年8月13日 下午1:30:30 <br/>
 * 
 * @author fuwei
 * @version
 * @since JDK 1.8
 * @see
 */
@Service
public class RoleService extends BaseService<Role> {
	@Autowired
	private RoleMapper roleMapper;
	@Override
	public BaseMapper<Role> getMapper() {
		return roleMapper;
	}
	 
	/**
	 * 
	 * @Title: getRolesByIds
	 * @Description: TODO(根据角色列表获取角色信息)
	 * @param @param roleIds
	 * @param @return 设定文件
	 * @return List<Role> 返回类型
	 * @throws
	 */
	public List<Role> getRoles(Set<String> roleIds) {
		String[] ids = (String[]) roleIds.toArray(new String[0]);
		return roleMapper.getRolesByIds(ids);
	}

	/**
	 * 
	 * @Title: getRoles
	 * @Description: TODO(根据id和类型获取角色列表)
	 * @param @param roleId
	 * @param @param roleType
	 * @param @return 设定文件
	 * @return List<Role> 返回类型
	 * @throws
	 */
	public List<Role> getRoles(String oprId, String roleRelType) {
		return roleMapper.getRoleByRelType(oprId, roleRelType);
	}
	/**
	 *  保存角色与权限
	 * @return
	 */
	public Boolean saveRoleAndItem(Role role,String[] items){
		if(save(role)){
			return saveRel(items ,String.valueOf(role.getRoleId()));
		}
		return false;
	}
	/**
	 *  修改角色与权限
	 * @return
	 */
	public Boolean modifyRoleAndItem(Role role,String[] items){
		if(roleMapper.update(role) > 0){
			return saveRel(items ,String.valueOf(role.getRoleId()));
		}
		return false;
	}
	/**
	 * 保存
	 * 
	 * @Title: save
	 * @Description: TODO(这里用一句话描述这个方法的作用)
	 * @param @param role
	 * @param @return 设定文件
	 * @return Boolean 返回类型
	 * @throws
	 */
	public Boolean save(Role role) {
		int ret =  roleMapper.insert(role) ;
		return ret > 0;
	}
	
	/**
	 * 保存角色与item的关系
	 * 
	 * @Title: saveRel
	 * @Description: TODO(这里用一句话描述这个方法的作用)
	 * @param @return 设定文件
	 * @return Boolean 返回类型
	 * @throws
	 */
	public Boolean saveRel(String[] items, String roleId) {
		// 删除 改角色的关系
		roleMapper.deleteRoleItemRelByRoleId(roleId);
		// /添加信息
		List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
		for (int i = 0; i < items.length; i++) {
			Map<String, Object> map = new HashMap<String, Object>();
			map.put("roleId", roleId);
			map.put("itemId", items[i]);
			list.add(map);
		}
		return roleMapper.insertRoleItemRel(list) > 0;
	 
	}
	@Override
	public List<Role> getAll(Page<Role> page){
		return  roleMapper.getAll(page);
	}
	/**
	 * 根据角色ID查询itemids
	* @Title: getRoleItemByRoleId 
	* @Description: TODO(这里用一句话描述这个方法的作用) 
	* @param @param roleId
	* @param @return    设定文件 
	* @return Set<String>    返回类型 
	* @throws
	 */
	public Set<String> getRoleItemByRoleId(String roleId){
		return roleMapper.getRoleItemByRoleId(roleId);
	}
	
	
	/**
	 * 角色描述是否存在
	* @Title: isExistRoleDes 
	* @Description: TODO(这里用一句话描述这个方法的作用) 
	* @param @param roleDes
	* @param @return    设定文件 
	* @return Boolean    返回类型 
	* @throws
	 */
	public Boolean isExistRoleDes(String roleDes) {
		return roleMapper.getCountByRoleDes(roleDes) < 1;
	}
	/**
	 * 删除角色
	 * //1.删除角色 2.删除角色与操作员的关系  3.删除角色与权限的关系 
	 * 
	* @Title: deleteRole 
	* @Description: TODO(这里用一句话描述这个方法的作用) 
	* @param @param roleId
	* @param @return    设定文件 
	* @return Boolean    返回类型 
	* @throws
	 */
	@Transactional(propagation=Propagation.REQUIRED)
	public Boolean deleteRole(String roleId){
		//1.删除角色
		if(roleMapper.deleteByRoleId(roleId) > 0 ){
			//2删除角色与操作员的关系 
			roleMapper.deleteRoleOprRelByRoleId(roleId);
			//3.删除角色与权限的关系 
			roleMapper.deleteRoleItemRelByRoleId(roleId);
			return true;
		}
		return false;
	}
	public List<Map<String,Object>> getRoleByOrgId(String orgId){
		return roleMapper.getRoleByOrgId(orgId);
	}
	public List<Role> getRoleByOprId(String oprId){
		return roleMapper.getRoleByOprId(oprId);
	}
	
	public List<Map<String, Object>> getAllMap(Page<Role> page) {
		return roleMapper.getAllMap(page);
	}
	
 
}
